home *** CD-ROM | disk | FTP | other *** search
- README.TXT
- ==========
-
-
- What is SimplePrintout?
- =======================
-
- This directory contains a very simple printing class.
-
- SimplePrintout unit provides a very basic printout for your
- quick and dirty Delphi for .NET projects. Many times when
- you sit down to write a tiny software project you feel like
- there is no easy way of printing out relatively small amounts
- of data.
-
- Of course, .NET makes it easier to print text and pictures. However
- the first time you need to print justified text or bordered text, or
- pages with simple header or footer, you come to realize that you
- still have to revert to counting pixels.
-
- In many cases using a professional report generating tools
- may be an overkill, but writing your own printing component
- can be a daunting task too.
-
- That is where SimplePrintout class comes into play.
-
- SimplePrintout keeps all those details hidden from you. Although
- it is not a full-blown reporting tool, you will be amazed just
- how much you can accomplish with this little unit...
-
-
-
- Installation
- ============
-
- At the time of this writing SimplePrintout for Delphi for .NET
- has some minor problems with code serialization. I need to clean
- that up to make it into a component. So for now SimplePrintout
- is provided as a Delphi unit, rather than an installable component.
- As a result, it does not require any installation. Simply copy the
- unit called Simp_Prn.PAS to your project directory and add
- "Simp_Prn" to your unit's USES statement.
-
- Don't forget to check Borland CodeCentral for the latest code
- updates.
-
-
-
- How to use SimplePrintout component?
- ====================================
-
- The best way to find out about SimplePrintout is to compile and
- run the DemoProj application. This demo application will get
- you started.
-
-
- Lesson 1.
- --------
- You may simply create and use an instance of SimplePrintout at
- runtime. It is relatively easy. Start by adding "Simp_Prn" unit
- to your "uses" stament.
-
- procedure TWinForm.Button1_Click(sender: System.Object;
- e: System.EventArgs);
- VAR p: SimplePrintout;
- s: StreamReader;
- begin
- // It's very simple to create
- // a SimplePrintout...
- //
- p := SimplePrintout.Create();
-
- try
- // Always call BeginPrintout!
- //
- p.BeginPrintout();
-
- // And finally here is how to print out a text file...
- // This is much simpler than Microsoft .NET sample.
- //
- s := StreamReader.Create('c:\autoexec.bat');
- p.WriteString(s.ReadToEnd());
- s.Close();
-
- // Use this call to flush the text to the printer
- //
- p.EndPrintout();
-
- // NOTE: To cancel printout you may use
- // p.AbortPrintout(); instead of p.EndPrintout();
- //
- except
- on E: Exception do
- MessageBox.Show(E.Message);
- end;
- p.Free; // with .NET you do not really need this one
- end;
-
-
- Lesson 2.
- --------
- Let us add some meat to our sample code...
-
- procedure TWinForm.Button1_Click(sender: System.Object;
- e: System.EventArgs);
- VAR p: SimplePrintout;
- s: StreamReader;
- begin
- p := SimplePrintout.Create();
-
- try
- // Always call BeginPrintout!
- //
- p.BeginPrintout();
-
- // You may set margins (measured in inches)
- //
- p.TopMargin := 1.5; // leave some room for the header
- p.BottomMargin := 1; // leave some room for the footer
-
- // It is pretty easy to set footers and headers...
- //
- p.Header.Text := 'you can have'+#13#10+'multi-line HEADERS';
- p.Footer.TextIndentBottom := 0.3;
- p.Footer.Text := 'Footer text';
-
- // To align your paragraph text to Left,
- // simply set Band.TextAlignment to baLeft
- // (Your choices for alignment are:
- // baLeft, baRight, baCentered, and baJustified
- //
- p.Band.TextAlignment := BandAlignment.baLeft;
-
- // This is how you can change fonts.
- // It's pretty striaghtforward.
- //
- p.Band.TextFont := System.Drawing.Font.Create('Arial', 12);
-
- // And finally here is how to print out a text file...
- // This is much simpler than Microsoft .NET sample.
- //
- s := StreamReader.Create('c:\autoexec.bat');
- p.WriteString(s.ReadToEnd());
- s.Close();
-
- // Use this call to flush the text to the printer
- //
- p.EndPrintout();
-
- // NOTE: To cancel printout you may use
- // p.AbortPrintout(); instead of p.EndPrintout();
- //
- except
- on E: Exception do
- MessageBox.Show(E.Message);
- end;
- p.Free; // with .NET you do not really need this one
- end;
-
- Lesson 3.
- --------
- How to add Page numbering to the footer (or header). Or rather,
- let us paraphrase this question. How to make headers and footers
- more dynamic?
-
- All you need is to add an event handler like this:
-
- procedure TWinForm.on_PrintPage(sender: System.Object;
- ua: UserPrintPageEventArgs);
- begin
- (sender as SimplePrintout).Footer.Text :=
- 'Page ' + ua.PageNo.ToString;
- end;
-
- procedure TWinForm.Button1_Click(sender: System.Object;
- e: System.EventArgs);
- VAR p: SimplePrintout;
- s: StreamReader;
- begin
- p := SimplePrintout.Create();
-
- try
- // Always call BeginPrintout!
- //
- p.BeginPrintout();
-
- // Add our print page handler here
- //
- Include(p.PrintPage, on_PrintPage);
-
- s := StreamReader.Create('c:\autoexec.bat');
- p.WriteString(s.ReadToEnd());
- s.Close();
-
- p.EndPrintout();
- except
- on E: Exception do
- MessageBox.Show(E.Message);
- end;
- end;
-
-
- Lesson 4.
- --------
- We already know some methods and some properties of the SimplePrintout
- class. But there are other methods and properties you may want to use
- as you go.
-
- BeginPrintout - use this call before calling any other methods.
-
- WriteString - lets you print one string at the time. The string
- can be as long as you want it to be. It will be
- wrapped as necessary. This way you can put your
- entire document into one string and send it to
- printer with one command.
-
- PageBreak - inserts a page break.
-
- EndPrintout - this will flush data to the physical printer.
-
- AbortPrintout - this will terminate output without printing
- to physical device, if called instead of EndPrintout.
-
- Page setup:
- NonPrintableGutterSize - measured in inches.
- Most printers do not let you print at
- the very edge of the page. We set this
- non-printable gutter size to 3/16" by default
- The programmer can change this setting.
-
- TopMargin - Top margin including the gutter, in inches
- LeftMargin - Left margin including the gutter, in inches
- RightMargin - Right margin including the gutter, in inches
- BottomMargin - Bottom margin including the gutter, in inches
-
- HeaderText - Static text for the page header, this text
- can be changed dynamically in an event handler
-
- FooterText - Static text for the page footer, this text
- can be changed dynamically in an event handler
-
- There are two areas on the page. One is within the page margins
- and another is the page including the margin areas. For the lack
- of a better term, these two areas are called Inner and Outer:
-
- InnerBorderPixels - measured in pixels
- Thickness of the border inside the margins, in pixels
-
- OuterBorderPixels - measured in pixels
- Thickness of the border outside the margins, but still
- within the non-printable gutter area.
-
- InnerBorderColor - Color of the border inside the margins
- OuterBorderColor - Color of the border outside the margins
- InnerBackColor - Background color of the page inside the margins
- OuterBackColor - Background color of the margins
-
- Header, Footer, Band properties:
-
- First of all you probably realize that there is a property called
- Footer. Then there is a Header. There is also a property called
- "Band." All of these properties are of type TBand. TBand represents
- a paragraph of text with its own set of parameters.
-
- Header and Footer are probably easy to understand. The Band property
- simply means current paragraph. You can set up the current paragraph
- font, size, etc., and simply call WriteString(text). The text will
- be printed with current settings. Then you change the Band again,
- call WriteString() and the text will be printed with new paragraph
- settings.
-
- So as you see there are three paragraphs you work with: Header, Footer,
- and the current paragraph exposed through the Band property.
-
- A paragraph (or band) has the following properties:
-
- TextAlignment - current text alignment
- instructs the simple printout component to switch
- paragraph alignment. This property can be changed
- in the middle of printing, it will affect subsequent
- WriteString() calls.
- This property can be set to: baRight, baCentered,
- baJustified, and default: baLeft.
-
- TextFont - lets you select and change a font for the body of
- the paragraph.
-
- Keep in mind that a paragraph usually consists of a box
- (background) and the text (foreground). Box and text can
- have their own indents, colors, etc:
-
- BorderPixelSize - paragraph [box] border pixel size
- By default this is set to 0, so no box is not
- printed. But the box is still there. It has
- a white background color. You can get rid of the
- box by setting Transparent property to TRUE
-
- Transparent - we just explained this one
-
- BorderColor - paragraph [box] border color
- ForeColor - text color
- BackColor - paragraph [box] color, background color
-
- IndentLeft - paragraph indents, in inches
- IndentTop
- IndentRight
- IndentBottom
-
- TextIndentLeft - text indents within the paragraph
- TextIndentRight
- TextIndentTop
- TextIndentBottom
-
- Lesson 5.
- --------
- SimplePrintout also has a couple of Event handlers. Please
- take a look at the DemoProj application to see how they are used.
-
- PrintPage event is of type UserPrintPageEvent. It is very similar to
- .NET PrintPage event, so that the programmer gets the full control
- before printing each page. Pay attention to the second parameter
- of type UserPrintPageEventArgs. It has these members:
-
- PageParms: PrintPageEventArgs;
- -- this is the original PrintPageEventArgs, we
- pass it to the user.
-
- PageNo: Integer; -- (read only) current page count
-
- The following five Boolean members are set to FALSE by default.
- However the programmer can set them to TRUE in the event handler
- to indicate specific behaviors:
-
- PrintoutLastPage: Boolean;
- -- User may set this to TRUE, which means that SimplePrintout
- will print this page and then stop printing.
-
- BackgroundHandledByUser: Boolean;
- -- If set by user to TRUE it means that SimplePrintout does not
- have to paint the page background, user may have added a
- background picture, for example.
-
- PageHandledByUser: Boolean;
- -- (set by user) SimplePrintout does not paint the current
- page user handled the page. Note that it still paints the
- header and footer. The next two items let you disable the
- header or the footer, or both.
-
- HeaderHandledByUser: Boolean; -- indicates that user handled the header
- FooterHandledByUser: Boolean; -- indicates that user handled the header
-
- ----------------------------------------------------
- Please take a look at the demo project to see the working code. You
- may find it easier to cut and paste the code into your project and
- build it up from there.
-
- ----------------------------------------------------
- Enjoy!
-
- Feedback to: alfred@softsci.com
- Ref: SimplePrintout for Delphi for .NET (11/19/03)
- ----------------------------------------------------
-